
// 1.引入用来发送请求的方法，一定要补全路径
import { request } from "../../request/request.js"
import { getSetting, chooseAddress, openSetting, showModal, showToast, requestPayment } from "../../utils/asyncWx.js"
/**
 * 1.页面加载的时候
 *   1）从缓存中获取购物车数据，渲染到页面中 这些数据 checked = true
 * 2.微信支付
 *   1）哪些人，哪些账号，可以实现微信支付
 *      1.企业账号
 *      2.企业账号的小程序后台中，必须给开发者添加白名单
 *        .一个appid可以同时绑定多个开发者
 *        .绑定白名单的开发者可以共用这个appid和它的开发权限
 * 3.支付按钮
 *   1）先判断缓存中有没有token
 *   2）没有，跳转到授权页面，进行获取token
 *   3）有token进行下一步...
 *   4）创建订单，获取订单编号
 *   5）已经完成了微信支付
 *   6）手动删除缓存中已经被选中的商品
 *   7）删除后的购物车数据，填充回缓存
 *   8）再跳转页面
 */

Page({
  data: {
    address: {}, // 收货地址
    cart: [], // 购物车商品列表
    totalPrice: 0, // 商品总价格
    totalNum: 0 // 商品总数量
  },
  // 页面开始加载 就会触发
  onShow() {
    // 1.获取缓存中的收货地址信息
    const address = wx.getStorageSync("address")
    // 1.获取缓存中的购物车数据
    let cart = wx.getStorageSync("cart") || []
    // 过滤后的购物车数组
    cart = cart.filter(v => v.checked)
    // 2.给data赋值
    this.setData({ address })

    // 总价格
    let totalPrice = 0
    // 总数量
    let totalNum = 0
    // 给商品循环
    cart.forEach(v => {
      // 计算总价格 = 数量 * 单价
      totalPrice += v.num * v.goods_price
      totalNum += v.num
    })

    // 把购物车数据重新设置回data中和缓存中
    this.setData({
      cart,
      totalPrice,
      totalNum,
      address
    })
  },
  // 点击支付
  async handleOrderPay() {
    try {
      // 1.判断缓存中有没有token
      const token = wx.getStorageSync("token")
      // 2.判断token为空，跳转到auth页面进行授权，获取token
      if (!token) {
        wx.navigateTo({
          url: '/pages/auth/auth',
        })
        return
      }
      //console.log('已经存在token')
      // 3.创建订单  
      // 3.1.准备请求头参数
      //const header = { Authorization: token }
      // 3.2.准备请求体参数 商品价格
      const order_price = this.data.totalPrice
      // 3.3.准备收货地址
      const consignee_addr = this.data.address.all
      //const consignee_addr = this.data.address.provinceName + address.cityName + address.countyName + address.detailInfo
      // 3.4.准备订单数组
      const cart = this.data.cart
      let goods = []
      cart.forEach(v => goods.push({
        goods_id: v.goods_id,
        goods_number: v.num,
        goods_price: v.goods_price
      }))
      // 先封装
      const orderParams = { order_price, consignee_addr, goods }
      // 4.准备发送请求，创建订单
      const { order_number } = await request({
        url: '/my/orders/create',
        data: orderParams,
        method: 'POST'
      })
      //console.log(order_number)
      // 5.发起预支付接口
      const { pay } = await request({
        url: 'my/orders/req_unifiedorder',
        data: { order_number },
        method: 'POST'
      })
      // 6.发起微信支付
      await requestPayment(pay)
      // 7.支付成功后，查询后台的订单状态
      const res = await request({
        url: 'my/orders/chkOrder',
        data: { order_number },
        method: 'POST'
      })
      await showToast({
        title: '支付成功'
      })
      // 8.手动删除缓存中，已经支付的商品
      let newCart = wx.getStorageSync("cart")
      newCart = newCart.filter(v => !v.checked)
      wx.setStorageSync("cart", newCart)
      // 9.订单支付成功，跳转到会员订单页面
      wx.navigateTo({
        url: '/pages/order/order',
      })
    } catch (error) {
      await showToast({
        title: '支付失败'
      })
      console.log(error)
    }
  }
})
